# 数据结构案例

# 1. 列表 (List)
print("---- 列表操作 ----")
fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 增加元素
fruits.append("草莓")  # 在列表末尾添加元素
fruits.insert(2, "梨")  # 在指定位置插入元素

# 删除元素
fruits.remove("香蕉")  # 删除指定元素
del fruits[1]  # 删除指定索引的元素

# 查找元素
index_of_orange = fruits.index("橙子")  # 查找元素的索引
print(f"橙子的位置: {index_of_orange}")

# 修改元素
fruits[1] = "柚子"  # 修改指定索引的元素

# 遍历列表
print("修改后的水果列表:")
for fruit in fruits:
    print(fruit)

# 列表切片
print(f"前两个水果: {fruits[:2]}")  # 切片操作

# 2. 元组 (Tuple)
print("\n---- 元组操作 ----")
coordinates = (10.0, 20.0, 30.0)

# 元组是不可变的，因此无法修改，但可以访问元素
print(f"第一个坐标值: {coordinates[0]}")

# 查找元素的索引
index_of_20 = coordinates.index(20.0)
print(f"20.0 的索引: {index_of_20}")

# 元组切片
print(f"坐标的前两个值: {coordinates[:2]}")

# 3. 字典 (Dictionary)
print("\n---- 字典操作 ----")
person = {"name": "Alice", "age": 25, "city": "北京"}

# 增加键值对
person["job"] = "工程师"

# 删除键值对
del person["city"]

# 查找值
name = person["name"]
print(f"姓名: {name}")

# 修改值
person["age"] = 26

# 遍历字典
print("修改后的字典:")
for key, value in person.items():
    print(f"{key}: {value}")

# 获取所有键或值
keys = person.keys()
values = person.values()
print(f"所有键: {keys}")
print(f"所有值: {values}")

# 4. 集合 (Set)
print("\n---- 集合操作 ----")
fruits_set = {"苹果", "香蕉", "橙子"}

# 增加元素
fruits_set.add("葡萄")

# 删除元素
fruits_set.discard("香蕉")  # 不存在时不会报错

# 集合运算
other_fruits = {"苹果", "草莓", "香蕉"}
union_fruits = fruits_set.union(other_fruits)  # 并集
intersection_fruits = fruits_set.intersection(other_fruits)  # 交集
difference_fruits = fruits_set.difference(other_fruits)  # 差集

print(f"并集: {union_fruits}")
print(f"交集: {intersection_fruits}")
print(f"差集: {difference_fruits}")

# 5. 综合操作
print("\n---- 综合操作 ----")

# 使用列表和字典存储多个学生的信息
students = [
    {"name": "Tom", "age": 18, "score": 88},
    {"name": "Jerry", "age": 19, "score": 92},
    {"name": "Alice", "age": 17, "score": 95}
]

# 根据成绩排序
students_sorted = sorted(students, key=lambda student: student["score"], reverse=True)

print("按成绩排序后的学生信息:")
for student in students_sorted:
    print(f"{student['name']} - {student['score']}")

